package com.svh.Paginator;

import com.svh.Entidad.Empleado;
import com.svh.Hibernate.HibernatePaginator;
import org.hibernate.HibernateException;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Luis Alonso Ballena Garcia
 * 
 * 
 */
public class EmpleadoPaginador extends HibernatePaginator<Empleado>{
    
    public static final int WITH_USER = 1;
    
    public static final int WITHOUT_USER = 2;
    
    public static final int ALL = 3;
    
    private final int opcionBusqueda;
    
    /** POR DEFECTO EL TIPO DE BUSQUEDA ES BUSCAR TODOS LOS EMPLEADOS **/
    public EmpleadoPaginador() {
        super();
        opcionBusqueda = 0;
    }
    
    public EmpleadoPaginador(int opcionBusqueda)
    {
        super();
        this.opcionBusqueda = opcionBusqueda;
    }
    
    @Override
    public void initFiltro() {
        DetachedCriteria criteria = null;
        try{
            criteria = DetachedCriteria.forClass(Empleado.class,"empleado");
            switch(opcionBusqueda){
                case WITH_USER:
                    criteria.createAlias("empleado.usuario","user",CriteriaSpecification.LEFT_JOIN)
                    .createAlias("user.perfil", "perf",CriteriaSpecification.LEFT_JOIN);
                    criteria.add(Restrictions.isNotNull("empleado.usuario"));
                    break;
                case WITHOUT_USER:
                    criteria.add(Restrictions.isNull("empleado.usuario"));
                    break;
                case ALL:
                    /** este tipo de estado trae toda la informacion con respecto a usuarios y perfiles **/
                    criteria.createAlias("empleado.usuario","user",CriteriaSpecification.LEFT_JOIN)
                    .createAlias("user.perfil", "perf",CriteriaSpecification.LEFT_JOIN);
                    break;
            }
            criteria.add(Restrictions.ne("empleado.id",1));/** el primer registro le pertenece al administrador **/
            /** tiene lazy -> EAGER**/
            super.filtroCriteria = criteria;
        }catch(HibernateException e){
            e.printStackTrace();
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    
}
